package objetosGraficos;

import java.awt.Dimension;
import javax.swing.ImageIcon;
import frame.FrameJuego;

/**
 * Clase para representar todas las naves del juego.
 *
 */
public abstract class Nave extends Elemento{
	
	
	// Atributos de instancia
	
	private int factorMovimiento, salud;
	private String nombre;
	protected FrameJuego frame;
	private int danioBala;
	
	
	// Constructor
	
	public Nave(int factorMovimiento, ImageIcon image, int ancho, int alto, String nombre, int salud, int danioBala){		
		this.factorMovimiento = factorMovimiento;
		this.setIcon(image);
		this.nombre = nombre;
		this.salud = salud;
		this.danioBala = danioBala;
		this.setTamanio(ancho,alto);		
	}
	
	// Métodos
	
	/**
	 * Asocia la nave con el frame del juego.
	 * @param frame el frame del juego.
	 */
	public void setFrame (FrameJuego frame){
		this.frame = frame;
	}
	
	/**
	 * Setea el tamaño de la nave.
	 * @param ancho el ancho de la nave.
	 * @param alto el alto de la nave.
	 */
	protected void setTamanio(int ancho, int alto){
		this.setSize(new Dimension(ancho,alto));
	}
	
	/**
	 * Retorna el nombre de la nave.
	 * @return un string con el nombre de la nave.
	 */
	public String getNombre (){
		return nombre;
	}
	
	/**
	 * Setea el nombre de la nave.
	 * @param n el nombre que tendrá la nave.
	 */
	protected void setNombre (String n){
		this.nombre = n;
	}
	
	/**
	 * Retorna la salud de la nave.
	 * @return la salud de la nave.
	 */
	public int getSalud(){
		return salud;
	}
	
	/**
	 * Reduce la salud de la nave.
	 * @param s la cantidad de salud que se reducirá.
	 */
	public void reducirSalud (int s){
		salud = salud - s;	
	}
	
	/**
	 * Aumenta la salud de la nave.
	 * @param s la cantidad de salud que se aumentará.
	 */
	public void aumentarSalud (int s){
		this.salud += s;
	}
	
	/**
	 * Setea la salud de la nave.
	 * @param s la salud que tendrá la nave.
	 */
	public void setSalud (int s){
		this.salud = s;
	}
	
	/**
	 * Retorna el factor de movimiento de la nave.
	 * @return el factor de movimiento de la nave.
	 */
	public int getFactor (){
		return factorMovimiento;
	}
	
	/**
	 * Setea el factor de movimiento de la nave.
	 * @param i el factor de movimiento que tendrá la nave.
	 */
	public void setFactor (int i){
		this.factorMovimiento = i;
	}
	
	/**
	 * Setea el daño de la nave.
	 * @param s el daño que tendrá la nave.
	 */
	public void setDanioBala (int danioBala){
		this.danioBala = danioBala;
	}
	
	/**
	 * Retorna el daño de la nave.
	 * @return el daño de la nave.
	 */
	public int getDanioBala(){
		return danioBala;
	}
	
	/**
	 * Reduce el daño que causa la nave.
	 * @param danioR la cantidad de daño que se reducirá.
	 */
	public void reducirDanioBala(int danioR){
		if (this.danioBala - danioR > 0)
			this.danioBala -= danioR;
		else 
			this.danioBala = 0;
		
	}
	
	/**
	 * Aumenta el daño que causará la nave.
	 * @param s la cantidad de daño que se aumentará.
	 */
	public void aumentarDanioBala(int danioA){
		this.danioBala += danioA;
	}
}
